]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
layout: Disconnect 'monitors-changed' handler on shutdown
authorJonas Ådahl <jadahl@gmail.com>
Thu, 2 Feb 2023 14:36:49 +0000 (15:36 +0100)
committerMarge Bot <marge-bot@gnome.org>
Mon, 6 Feb 2023 18:10:01 +0000 (18:10 +0000)
Doing it ourselves in the shutdown handler in layout.js means we won't
risk reacting to monitor changes that happen after gnome-shell prepares
to shutdown and the signal handler would disconnect itself in case we
used `connectObject(..)`.

This will currently never happen, but in the future perf tests will be
able to create virtual monitors for testing purposes, and they might get
destroyed during the shutdown procedures, causing us to react to them
when we shouldn't.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2623>

js/ui/layout.js

index 6b9deeaa35f5751b2009af048507630bc09bceb8..090295f0f3a34d901ee07c60b65731076b201d09 100644 (file)
@@ -222,6 +222,9 @@ var LayoutManager = GObject.registerClass({
         global.stage.remove_actor(global.window_group);
         this.uiGroup.add_actor(global.window_group);
         global.connect('shutdown', () => {
+            const monitorManager = global.backend.get_monitor_manager();
+            monitorManager.disconnectObject(this);
+
             const adoptedUiGroupActors = [
                 global.window_group,
                 global.top_window_group,
@@ -330,8 +333,9 @@ var LayoutManager = GObject.registerClass({
                         this._updateFullscreen.bind(this));
 
         const monitorManager = global.backend.get_monitor_manager();
-        monitorManager.connect('monitors-changed',
-                               this._monitorsChanged.bind(this));
+        monitorManager.connectObject(
+            'monitors-changed', this._monitorsChanged.bind(this),
+            this);
         this._monitorsChanged();
 
         this.screenTransition = new ScreenTransition();